package com.itheima.security;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.SysUser;
import com.itheima.service.UserService;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import java.util.ArrayList;
import java.util.List;

public class SecurityConfigUserService implements UserDetailsService{

    @Reference
    private UserService userService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        SysUser sysUser = userService.findByUsername(username);


        List<GrantedAuthority> grantedAuthorityList = new ArrayList<>();

        if (sysUser!=null){
            for (Role role : sysUser.getRoles()) {
                SimpleGrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getKeyword());
                grantedAuthorityList.add(grantedAuthority);
                for (Permission permission : role.getPermissions()) {
                    SimpleGrantedAuthority grantedAuthority1 = new SimpleGrantedAuthority(permission.getKeyword());
                    grantedAuthorityList.add(grantedAuthority1);
                }
            }
        }
        User user = new User(sysUser.getUsername(), sysUser.getPassword(), grantedAuthorityList);
        return user;
    }
}
